package org.csu.mypetstore.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.csu.mypetstore.domain.BO.AccountBO;
import org.csu.mypetstore.domain.BO.ItemBO;
import org.csu.mypetstore.domain.PO.*;
import org.csu.mypetstore.mapper.*;
import org.csu.mypetstore.service.CatalogService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Service
public class CatalogServiceImpl implements CatalogService {
    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private ProductMapper productMapper;
    @Autowired
    private ItemMapper itemMapper;
    @Autowired
    private InventoryMapper inventoryMapper;
    @Autowired
    private MyItemMapper myItemMapper;
    QueryWrapper<Product> productQueryWrapper;
    QueryWrapper<Category> categoryQueryWrapper;
    QueryWrapper<Item> itemQueryWrapper;
    QueryWrapper<MyItem> myItemQueryWrapper;
    QueryWrapper<Inventory> inventoryQueryWrapper;

    public CatalogServiceImpl(){
        productQueryWrapper = new QueryWrapper<>();
        categoryQueryWrapper = new QueryWrapper<>();
        itemQueryWrapper = new QueryWrapper<>();
        myItemQueryWrapper = new QueryWrapper<>();
        inventoryQueryWrapper = new QueryWrapper<>();
    }

    //获取所有商品列表 test pass
    public List<Category> getCategoryList() {
        return categoryMapper.selectList(null);
    }

    //通过categoryid获取category test pass
    public Category getCategory(String categoryId) {
        categoryQueryWrapper.clear();
        categoryQueryWrapper.eq("categoryId",categoryId);
        return categoryMapper.selectOne(categoryQueryWrapper);
    }

    //通过productid获取product test pass
    public Product getProduct(String productId) {
        productQueryWrapper.clear();
        productQueryWrapper.eq("productId",productId);
        return productMapper.selectOne(productQueryWrapper);
    }

    //通过categoryid获取product的list test pass
    public List<Product> getProductListByCategory(String categoryId) {
        productQueryWrapper.clear();
        productQueryWrapper.eq("categoryId",categoryId);
        return productMapper.selectList(productQueryWrapper);
    }

    //TODO 可以查询category和product和item
    public List<Product> searchProductList(String keywordString) {
        productQueryWrapper.clear();
        productQueryWrapper.like("productName", keywordString);
        return productMapper.selectList(productQueryWrapper);
    }

    //获取item列表 test pass
    public List<ItemBO> getItemListByProduct(String productId) {
        QueryWrapper<Item>itemQueryWrapper = new QueryWrapper<>();
        itemQueryWrapper.eq("productid", productId);
        List<Item> itemList =  itemMapper.selectList(itemQueryWrapper);
        List<ItemBO> itemBOList = new ArrayList<>();

        //将库存注入item中
        for (int i = 0; i < itemList.toArray().length; i++){
            //从inventory表中获取quantity，注入item
            Item item = itemList.get(i);
            inventoryQueryWrapper.clear();
            inventoryQueryWrapper.eq("itemId", item.getItemId());
            Inventory inventory = inventoryMapper.selectOne(inventoryQueryWrapper);
            itemBOList.add(getItemBOFromItemAndInventory(item, inventory));
        }
        return itemBOList;
    }

    //查看所有已购买货物的状态
    @Override
    public List<MyItem> getMyItemList(Account account) {
        myItemQueryWrapper.clear();
        myItemQueryWrapper.eq("username", account.getUsername());
        return myItemMapper.selectList(myItemQueryWrapper);
    }

    //获取item test pass
    public ItemBO getItem(String itemId) {
        //获取item表中的值
        itemQueryWrapper.clear();
        itemQueryWrapper.eq("itemId",itemId);
        Item item = itemMapper.selectOne(itemQueryWrapper);

        //从inventory表中获取quantity，注入item
        inventoryQueryWrapper.clear();
        inventoryQueryWrapper.eq("itemId",itemId);
        Inventory inventory = inventoryMapper.selectOne(inventoryQueryWrapper);

        return getItemBOFromItemAndInventory(item, inventory);
    }

    //判断仓库中是否有库存 test pass
    public boolean isItemInStock(String itemId) {
        inventoryQueryWrapper.clear();
        inventoryQueryWrapper.eq("itemid",itemId);
        Inventory inventory = inventoryMapper.selectOne(inventoryQueryWrapper);
        return inventory.getQuantity().compareTo(BigDecimal.valueOf(0)) > 0;
    }

    //构造ItemBO对象通过Item和Inventory
    public ItemBO getItemBOFromItemAndInventory(Item item, Inventory inventory){
        if (item == null || inventory == null)
            return null;
        ItemBO itemBO = new ItemBO();
        itemBO.setItemId(item.getItemId());
        itemBO.setProductId(item.getProductId());
        itemBO.setListPrice(item.getListPrice());
        itemBO.setDescription(item.getAttribute1() + ", " + item.getAttribute2() +
                ", " + item.getAttribute3() + ", " + item.getAttribute4() + ", " + item.getAttribute5());
        itemBO.setInventory(inventory.getQuantity());
        return itemBO;
    }

    public Item getItemFromItemBO(ItemBO itemBO){
        Item item = new Item();
        BeanUtils.copyProperties(itemBO, item);
        return item;
    }

//    //添加category
//    public void addCategory(Category category, Product product){
//        productMapper.insert(product);
//        categoryQueryWrapper.clear();
//        categoryQueryWrapper.eq("catid",category.getCategoryId());
//        if(categoryMapper.selectOne(categoryQueryWrapper) == null){
//            categoryMapper.insert(category);
//        }
//    }
//
//    //添加某种商品类型
//    public void insertProduct(Product product){
//        productMapper.insert(product);
//    }
//
//    public void insertCategory(Category category){
//        categoryMapper.insert(category);
//    }
//
//    //下架某一种商品类型
//    public void deleteByProduct(Product product){
//        //删除product表中的该productid的产品
//        productQueryWrapper.clear();
//        productQueryWrapper.eq("productid",product.getProductId());
//        productMapper.delete(productQueryWrapper);
//        //删除item表中的该productid的产品
//        itemQueryWrapper.clear();
//        itemQueryWrapper.eq("productid",product.getProductId());
//        itemMapper.delete(itemQueryWrapper);
//
//        //查找product表中是否还有该category，若没有就从category表中删除该类
//        productQueryWrapper.clear();
//        productQueryWrapper.eq("category",product.getCategoryId());
//        if(productMapper.selectOne(productQueryWrapper) == null){
//            categoryQueryWrapper.clear();
//            categoryQueryWrapper.eq("catid",product.getCategoryId());
//            categoryMapper.delete(categoryQueryWrapper);
//        }
//    }
//
//    //修改某种商品类型
//    public void updateByProductAndCategory(Category category , Product product){
//        //更新category
//        categoryUpdateWrapper.clear();
//        categoryUpdateWrapper.eq("catid",category.getCategoryId());
//        categoryMapper.update(category,categoryUpdateWrapper);
//        //更新product
//        productUpdateWrapper.clear();
//        productUpdateWrapper.eq("productid",product.getProductId());
//        productMapper.update(product,productUpdateWrapper);
//    }
//
//    //查询所有商品类型
//    public List<Product> getAllProduct(){
//        List<Product>productList = productMapper.selectList(null);
//        Iterator<Product>productIterator = productList.listIterator();
//
//        //设置productlist中的categorydescription
//        while(productIterator.hasNext()){
//            Product product = productIterator.next();
//            categoryQueryWrapper.clear();
//            categoryQueryWrapper.eq("catid",product.getCategoryId());
//            product.setCategorydescription(categoryMapper.selectOne(categoryQueryWrapper).getDescription());
//        }
//        return productList;
//    }
//
//    public List<Category> getAllCategory(){
//        List<Category> categoryList = categoryMapper.selectList(null);
//        return categoryList;
//    }
//
//    //上架一个商品,   增
//    public void insertItem(Item item){
//        itemMapper.insert(item);
//        Inventory inventory = new Inventory();
//        inventory.setItemid(item.getItemId());
//        //TODO 之后要设置为库存中的数量
//        inventory.setQty(10000);
//        inventoryMapper.insert(inventory);
//    }
//
//    //下架一个商品,  删
//    public void deleteItemByItemid(String itemid){
//        //删除该商品
//        itemQueryWrapper.clear();
//        itemQueryWrapper.eq("itemid",itemid);
//        itemMapper.delete(itemQueryWrapper);
//    }
//
//    //更新一个商品,  改
//    public void updateItem(Item item){
//        itemUpdateWrapper.clear();
//        itemUpdateWrapper.eq("itemid",item.getItemId());
//        itemMapper.update(item,itemUpdateWrapper);
//    }
//
//    //查询所有商品, 查
//    public List<Item> getItemList(){
//        return itemMapper.selectList(null);
//    }
//
//
////    public CommonResponse<List<Category>> getCategoryListT(){
////        List<Category>categoryList = categoryMapper.selectList(null);
////        if(categoryList.isEmpty()){
////            return CommonResponse.creatForSuccessMessage("没有分类信息");
////        }else{
////            return CommonResponse.creatForSuccess(categoryList);
////        }
////    }
}
